package com.evil.file.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.evil.common.file.dto.FileRespDTO;
import com.evil.file.pojo.entity.File;

import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 文件表
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
public interface FileService extends IService<File> {

    /**
     * 根据文件id获取文件
     *
     * @param fileId fileId
     * @return FileRespDTO Optional
     */
    Optional<FileRespDTO> isExistBaseByFileId(Long fileId);

    /**
     * 根据文件id获取文件（不存在抛异常）
     *
     * @param fileId fileId
     * @return FileRespDTO
     */
    FileRespDTO findBaseByFileId(Long fileId);

    /**
     * 根据文件code获取文件
     *
     * @param fileCode fileCode
     * @return FileRespDTO Optional
     */
    Optional<FileRespDTO> isExistBaseByFileCode(String fileCode);

    /**
     * 根据文件code获取文件（不存在抛异常）
     *
     * @param fileCode fileCode
     * @return FileRespDTO
     */
    FileRespDTO findBaseByFileCode(String fileCode);

    /**
     * 根据文件ids获取文件
     *
     * @param fileIds fileIds
     * @return FileRespDTO 列表
     */
    List<FileRespDTO> findBaseByFileIds(Collection<Long> fileIds);

    /**
     * 根据文件codes获取文件
     *
     * @param fileCodes fileCodes
     * @return FileRespDTO 列表
     */
    List<FileRespDTO> findBaseByFileCodes(Collection<String> fileCodes);

    /**
     * 根据文件ids获取文件
     *
     * @param fileIds fileIds
     * @return FileRespDTO Map
     */
    Map<Long, FileRespDTO> findBaseMapByFileIds(Collection<Long> fileIds);

    /**
     * 根据文件codes获取文件
     *
     * @param fileCodes fileCodes
     * @return FileRespDTO Map
     */
    Map<String, FileRespDTO> findBaseMapByFileCodes(Collection<String> fileCodes);

    /**
     * 获取下载url
     *
     * @param fileCode  文件code
     * @param timestamp 过期时间
     * @param token     登录人token
     * @param signature 签名
     * @return String
     */
    String getDownloadUrl(String fileCode, Long timestamp, String token, String signature);

    /**
     * 下载文件
     *
     * @param fileCode  fileCode
     * @param timestamp timestamp
     * @param token     token
     * @param signature signature
     * @return 文件
     */
    void download(String fileCode, Long timestamp, String token, String signature, HttpServletResponse response);
}

